import { useEffect } from 'react';
import useLatest from './useLatest';

/**
 * React自定义Hook: 在组件卸载时执行清理函数
 * @param fn 要在组件卸载时执行的函数
 */

const useUnmount = (fn: () => void) => {
  // 使用useLatest保存函数最新引用，避免闭包陷阱
  const fnRef = useLatest(fn);

  // 空依赖数组的useEffect，仅在组件挂载时执行一次
  useEffect(() => {
    // 返回的函数会在组件卸载时执行
    return () => {
      fnRef.current?.();
    };
  }, []);
};

export default useUnmount;
